/*
 * AbastractOS
 * Copyright (C) 2011 Davide Gessa
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
#include <ui/Rendering.hpp>
#include <ctype.h>
#include <config.h>
#include <Managers.hpp>
#include <Drivers/Vesa/Vesa.hpp>




const char __DefaultFont8x16[][16] = {
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xa, 0xa, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x24, 0x24, 0x7e, 0x24, 0x24, 0x24, 0x7e, 0x24, 0x24, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x1c, 0x2a, 0xa, 0xc, 0x18, 0x28, 0x2a, 0x1c, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4, 0x8a, 0x4a, 0x24, 0x10, 0x48, 0xa4, 0xa2, 0x40, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0xa, 0xa, 0xa, 0x4, 0x2a, 0x12, 0x2c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xa, 0x4, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x3e, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x10, 0x10, 0x10, 0x8, 0x8, 0x4, 0x4, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0xe, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x20, 0x20, 0x10, 0x8, 0x4, 0x2, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x20, 0x20, 0x18, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x10, 0x18, 0x14, 0x14, 0x12, 0x3e, 0x10, 0x10, 0x10, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x2, 0x2, 0x1e, 0x22, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x2, 0x1e, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x20, 0x10, 0x10, 0x8, 0x8, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x2, 0x4, 0x8, 0x10, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x4, 0x8, 0x10, 0x8, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x20, 0x10, 0x8, 0x8, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xf0, 0x8, 0x4, 0x62, 0x92, 0x92, 0xe2, 0x4, 0x8, 0xf0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x2, 0x2, 0x2, 0x2, 0x2, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1e, 0x22, 0x42, 0x42, 0x42, 0x42, 0x42, 0x22, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x2, 0x2, 0x72, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x9, 0x9, 0x6, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x22, 0x12, 0xa, 0x6, 0xa, 0x12, 0x22, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x82, 0xc6, 0xc6, 0xaa, 0xaa, 0x92, 0x92, 0x82, 0x82, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x42, 0x46, 0x4a, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x52, 0x62, 0x3c, 0x40, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x12, 0x22, 0x42, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x2, 0x1c, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x41, 0x41, 0x22, 0x22, 0x22, 0x14, 0x14, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1, 0x1, 0x22, 0x22, 0x52, 0x54, 0x54, 0x88, 0x88, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x41, 0x41, 0x22, 0x14, 0x8, 0x14, 0x22, 0x41, 0x41, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x41, 0x41, 0x22, 0x14, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x7f, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1, 0x7f, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x4, 0x4, 0x8, 0x8, 0x10, 0x10, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x6, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x6, 0x0, 0x0 },
	{ 0x0, 0x8, 0x14, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x20, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4, 0x2, 0x2, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x1c, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x1a, 0x26, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x22, 0x12, 0xa, 0xe, 0x12, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0x92, 0x92, 0x92, 0x92, 0x92, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0x26, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x2, 0x2, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x20, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x12, 0x4, 0x8, 0x12, 0xc, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x6, 0x2, 0x2, 0x2, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x14, 0x14, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x92, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0xc, 0xc, 0x12, 0x12, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1c, 0x10, 0xe, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x10, 0x8, 0x4, 0x2, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x4, 0x4, 0x4, 0x4, 0x2, 0x4, 0x4, 0x4, 0x4, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2, 0x4, 0x4, 0x4, 0x4, 0x8, 0x4, 0x4, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4c, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0xf, 0x2, 0xf, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0xa, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x1f, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x1f, 0x4, 0x4, 0x4, 0x1f, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x86, 0x49, 0x26, 0x10, 0x8, 0x4, 0x32, 0xc9, 0x30, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x14, 0x8, 0x1c, 0x22, 0x2, 0x2, 0x1c, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x4, 0x2, 0x4, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x14, 0x8, 0x7f, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1, 0x7f, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x1e, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xb7, 0x52, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x14, 0x8, 0x0, 0xc, 0x12, 0x4, 0x8, 0x12, 0xc, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x14, 0x8, 0x0, 0x1e, 0x10, 0x8, 0x4, 0x2, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x1c, 0x22, 0x2, 0x2, 0x22, 0x1c, 0x4, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x4, 0x1f, 0x4, 0x4, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x14, 0x3e, 0x8, 0x3e, 0x8, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x4, 0xa, 0x12, 0x24, 0x28, 0x10, 0x22, 0x1c, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x78, 0x84, 0x32, 0xa, 0xa, 0x32, 0x84, 0x78, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x6, 0x8, 0xe, 0xa, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0x14, 0xa, 0x14, 0x28, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x82, 0x9a, 0x9a, 0xaa, 0x82, 0x7c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0xa, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x3e, 0x8, 0x8, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x5, 0x4, 0x2, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x3, 0x4, 0x2, 0x4, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x2e, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x3c, 0x2a, 0x2a, 0x2c, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x6, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xe, 0xa, 0xa, 0xa, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x14, 0x28, 0x14, 0xa, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x86, 0x44, 0xa4, 0xd4, 0xa8, 0xe4, 0x82, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x86, 0x44, 0x24, 0xf4, 0x88, 0x44, 0xe2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x88, 0x4c, 0xa8, 0xd6, 0xa8, 0xe4, 0x82, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x8, 0x8, 0x8, 0x4, 0x2, 0x22, 0x22, 0x1c, 0x0 },
	{ 0x0, 0x0, 0x4, 0x8, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x14, 0x0, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2c, 0x1a, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x22, 0x0, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x14, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xe0, 0x30, 0x28, 0x28, 0xfc, 0x24, 0x22, 0x22, 0xe1, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x3c, 0x42, 0x2, 0x2, 0x2, 0x2, 0x2, 0x42, 0x3c, 0x10, 0x8, 0x0 },
	{ 0x0, 0x0, 0x4, 0x8, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x14, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x22, 0x0, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x1, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x4, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2, 0x5, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x5, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1e, 0x22, 0x42, 0x42, 0x4f, 0x42, 0x42, 0x22, 0x1e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x4c, 0x32, 0x42, 0x42, 0x46, 0x4a, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x10, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x18, 0x24, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x4c, 0x32, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x24, 0x0, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x14, 0x8, 0x14, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x7c, 0x62, 0x52, 0x52, 0x4a, 0x4a, 0x46, 0x46, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x10, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x18, 0x24, 0x0, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x24, 0x0, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x41, 0x41, 0x22, 0x14, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x3e, 0x42, 0x42, 0x3e, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xe, 0x12, 0x12, 0xa, 0x12, 0x22, 0x22, 0x22, 0x1a, 0x2, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x10, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x28, 0x14, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x24, 0x0, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x14, 0x8, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x20, 0xfc, 0x22, 0x22, 0xfc, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x2, 0x22, 0x1c, 0x8, 0x4, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x4, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0xa, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x4, 0xa, 0x10, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2c, 0x1a, 0x0, 0x1a, 0x26, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2c, 0x1a, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x3e, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x32, 0x2a, 0x2a, 0x26, 0x1e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x4, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1c, 0x10, 0xe, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1c, 0x10, 0xe, 0x0 }
};





Rendering::Rendering(Device *dev)
{
	m_Device = dev;
	m_Driver = dev->getDriver();
	m_Vesa = (VesaDriver *) m_Driver;
}



Rendering::~Rendering()
{
}



void
Rendering::drawText(unsigned x, unsigned y, char *text, uint32_t color, unsigned size)
{
	register char *let_data;
	register unsigned i, j;
	
	while(*text != '\0')
	{
		let_data = (char *) __DefaultFont8x16[(unsigned) (*text)];

		for(i = 0; i < 16; i++)
		{
			for(j = 0; j < 8; j++)
			{			
				if((let_data[i] & (1 << j)) != 0)
					m_Vesa->drawPixel((x + j), (y + i-4), ((uint32_t) color));
			}
		}

		x += 8;
		text++;
	}
}


void
Rendering::drawLine(unsigned x0, unsigned y0, unsigned x1, unsigned y1, uint32_t color)
{
	if(x0 == x1)
	{
		for(; y0 < y1; y0++)
			m_Vesa->drawPixel(x0, y0, color);
	}
	else if(y1 == y0)
	{
		for(; x0 < x1; x0++)
			m_Vesa->drawPixel(x0, y0, color);
	}
	else
	{
		register unsigned factor = (y1 - y0) / (x1 - x0);

		for(; x0 < x1; x0++, y0 += factor)
			m_Vesa->drawPixel(x0, y0, color); 
	}
}



void
Rendering::drawRectGradient(unsigned x0, unsigned y0, unsigned x1, unsigned y1,
							uint32_t color1, uint32_t color2, bool rightleft)
{
	uint32_t diff;

	if(!rightleft)
	{
		diff = (color2 - color1) / (y1 - y0);
	
		for(;y0 < y1; y1--)
			drawLine(x0, y1, x1, y1, color1 += diff);
	}
}


void
Rendering::drawRect(unsigned x0, unsigned y0, unsigned x1, unsigned y1, uint32_t color, bool fill)
{
	drawLine(x0, y0, x1, y0, color);
	drawLine(x0, y0, x0, y1, color);
	drawLine(x1, y0, x1, y1, color);
	drawLine(x0, y1, x1, y1, color);

	if(fill)
	{
		for(;y0 < y1; y1--)
			drawLine(x0, y1, x1, y1, color);
	}
}


void 
Rendering::swapBuffer()
{

}

